// 工作流程缓存使用示例
// 演示如何在SMT工作流程中正确管理缓存数据

import { 
  setBOMData, 
  getBOMData, 
  setOperatorData, 
  getOperatorData,
  setWorkflowSession,
  getWorkflowSession,
  smartCleanupCaches
} from '@/utils/cacheManager'

/**
 * Select页面 - 保存BOM信息
 * 当用户选择订单并获取BOM信息后调用
 */
export function saveSelectPageData(apiResponse) {
  try {
    // 保存订单基本信息（原有逻辑）
    const cacheKey = 'smtOrderData'
    const orderDataToStore = {
      type: 'object',
      data: apiResponse.data
    }
    uni.setStorageSync(cacheKey, orderDataToStore)
    
    // 新增：单独保存BOM信息到持久化缓存
    if (apiResponse.data.partList && apiResponse.data.partList.length > 0) {
      const bomData = {
        orderNo: apiResponse.data.orderNo,
        rollMngNo: apiResponse.data.rollMngNo,
        partList: apiResponse.data.partList,
        bomVersion: apiResponse.data.bomVersion || '1.0',
        retrievedAt: new Date().toISOString()
      }
      
      setBOMData(bomData)
      console.log('✅ BOM信息已保存到持久化缓存')
    }
    
    return true
  } catch (error) {
    console.error('❌ Select页面数据缓存失败:', error)
    return false
  }
}

/**
 * Operator-Confirm页面 - 保存作业员信息
 * 当作业员确认成功后调用
 */
export function saveOperatorConfirmData(operatorInfo) {
  try {
    const operatorData = {
      operatorId: operatorInfo.operatorId,
      operatorName: operatorInfo.operatorName,
      confirmTime: new Date().toISOString(),
      processId: operatorInfo.processId || null
    }
    
    setOperatorData(operatorData)
    console.log('✅ 作业员信息已保存到持久化缓存')
    
    // 创建完整的工作流程会话
    const bomData = getBOMData()
    if (bomData) {
      setWorkflowSession({
        stage: 'operator_confirmed',
        orderNo: bomData.orderNo,
        startTime: new Date().toISOString()
      })
      console.log('✅ 工作流程会话已创建')
    }
    
    return true
  } catch (error) {
    console.error('❌ 作业员确认数据缓存失败:', error)
    return false
  }
}

/**
 * Delivery-Confirm页面 - 获取完整工作流程数据
 * 页面加载时调用，获取所有必要的业务数据
 */
export function loadDeliveryConfirmData() {
  try {
    console.log('🔄 加载Delivery-Confirm页面数据...')
    
    // 获取完整的工作流程会话数据
    const workflowSession = getWorkflowSession()
    if (workflowSession) {
      console.log('✅ 工作流程会话数据:', workflowSession)
      return {
        success: true,
        data: workflowSession
      }
    }
    
    // 如果没有会话数据，尝试分别获取
    const bomData = getBOMData()
    const operatorData = getOperatorData()
    
    if (!bomData) {
      console.error('❌ 未找到BOM信息缓存')
      return {
        success: false,
        error: '未找到BOM信息，请重新开始流程'
      }
    }
    
    if (!operatorData) {
      console.error('❌ 未找到作业员信息缓存')
      return {
        success: false,
        error: '未找到作业员信息，请重新确认作业员'
      }
    }
    
    // 组合数据
    const combinedData = {
      bomData,
      operatorData,
      orderNo: bomData.orderNo,
      partList: bomData.partList,
      operatorId: operatorData.operatorId,
      operatorName: operatorData.operatorName
    }
    
    console.log('✅ 成功组合业务数据:', combinedData)
    return {
      success: true,
      data: combinedData
    }
    
  } catch (error) {
    console.error('❌ 加载Delivery-Confirm数据失败:', error)
    return {
      success: false,
      error: '数据加载失败: ' + error.message
    }
  }
}

/**
 * 工作流程完成后的缓存清理
 * 在Delivery-Confirm页面完成所有操作后调用
 */
export function completeWorkflowAndCleanup() {
  try {
    // 更新工作流程状态
    const workflowSession = getWorkflowSession()
    if (workflowSession) {
      setWorkflowSession({
        ...workflowSession,
        stage: 'completed',
        completedAt: new Date().toISOString()
      })
    }
    
    console.log('🎉 工作流程已完成')
    
    // 延迟清理，确保页面跳转完成
    setTimeout(() => {
      smartCleanupCaches(true) // 全量清理，包括业务数据
      console.log('🧹 工作流程完成，所有缓存已清理')
    }, 2000)
    
    return true
  } catch (error) {
    console.error('❌ 工作流程完成处理失败:', error)
    return false
  }
}

/**
 * 应急恢复：重建工作流程会话
 * 当检测到会话数据丢失但业务数据仍存在时调用
 */
export function recoverWorkflowSession() {
  try {
    const bomData = getBOMData()
    const operatorData = getOperatorData()
    
    if (bomData || operatorData) {
      console.log('🔧 检测到业务数据，尝试恢复工作流程会话...')
      
      setWorkflowSession({
        stage: 'recovered',
        recoveredAt: new Date().toISOString(),
        hasData: {
          bom: !!bomData,
          operator: !!operatorData
        }
      })
      
      console.log('✅ 工作流程会话已恢复')
      return true
    }
    
    console.log('⚠️ 未找到可恢复的业务数据')
    return false
  } catch (error) {
    console.error('❌ 工作流程会话恢复失败:', error)
    return false
  }
}

/**
 * 获取缓存状态诊断信息
 * 用于调试和问题排查
 */
export function getCacheDiagnostics() {
  try {
    const diagnostics = {
      timestamp: new Date().toISOString(),
      bomData: getBOMData(),
      operatorData: getOperatorData(),
      workflowSession: getWorkflowSession(),
      storageInfo: uni.getStorageInfoSync()
    }
    
    console.log('📊 缓存诊断信息:', diagnostics)
    return diagnostics
  } catch (error) {
    console.error('❌ 获取缓存诊断信息失败:', error)
    return null
  }
}